import java.util.concurrent.CompletableFuture;

public class Lesson15 {

    /**
     *  组合 CompletableFuture
     *  我们可以使用thenCompose()完成上面两个例子。
     *  这个方法等待第一个阶段的完成(大写转换)， 它的结果传给一个指定的返回CompletableFuture函数，它的结果就是返回的CompletableFuture的结果。
     *
     * 有点拗口，但是我们看例子来理解。
     * 函数需要一个大写字符串做参数，然后返回一个CompletableFuture, 这个CompletableFuture会转换字符串变成小写然后连接在大写字符串的后面。
     **/
    public static void main(String[] args) {
        String message = "Message";
        CompletableFuture completableFuture = CompletableFuture
            .completedFuture(message)
            .thenApply(s -> {
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                return s.toUpperCase();
            }).thenCompose(upper -> CompletableFuture.completedFuture(message).thenApply(String::toLowerCase).thenApply(s -> s + upper));
        //completableFuture.join();
        System.out.println(completableFuture.getNow(null));
}
}
